package leetcode;

/**
 * @author caifangyi
 * @date 2022/7/29
 */

import java.util.HashMap;

/**
 * 
 * 593. 有效的正方形
 * 
 * 给定2D空间中四个点的坐标p1,p2,p3和p4，如果这四个点构成一个正方形，则返回 true 。
 *
 * 点的坐标pi 表示为 [xi, yi] 。输入 不是 按任何顺序给出的。
 *
 * 一个 有效的正方形 有四条等边和四个等角(90度角)。
 *
 * 
 *
 * 示例 1:
 *
 * 输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
 * 输出: True
 * 示例 2:
 *
 * 输入：p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
 * 输出：false
 * 示例 3:
 *
 * 输入：p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
 * 输出：true
 * 
 *
 * 提示:
 *
 * p1.length == p2.length == p3.length == p4.length == 2
 * -104<= xi, yi<= 104
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/valid-square
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
class Day0593 {
   public static void main(String[] args) {


//      int[] p1 = {0,0}, p2 = {1,1}, p3 = {1,0}, p4 = {0,1}; //true
//      int[] p1 = {0,0}, p2 = {1,1}, p3 = {1,0}, p4 = {0,12};//false
//      int[] p1 = {1,0}, p2 = {-1,0}, p3 = {0,1}, p4 = {0,-1}; //true
      int[] p1 = {1134,-2539}, p2 = {492,-1255}, p3 = {-792,-1897}, p4 = {-150,-3181}; //true
//      int[] p1 = {0,1}, p2 = {1,2}, p3 = {0,2}, p4 = {0,0}; //false
      Solution solution = new Solution();
      boolean b = solution.validSquare(p1, p2, p3, p4);
      System.out.println(b);
   }

   static class Solution {
      public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
         return check(p1, p2, p3, p4) && check(p2,p3,p4,p1) && check(p3,p4,p1,p2) && check(p4,p3,p1,p2) ;
      }

      private boolean check(int[] p1, int[] p2, int[] p3, int[] p4) {
         //计算出某一个点延伸出的三条线, p1p2,p1p3,p1p4
         double p1p2 = Math.pow(p2[1]- p1[1],2)+Math.pow(p2[0]- p1[0], 2);
         double p1p3 = Math.pow(p3[1]- p1[1],2)+Math.pow(p3[0]- p1[0], 2);
         double p1p4 = Math.pow(p4[1]- p1[1],2)+Math.pow(p4[0]- p1[0], 2);
         if(p1p2 == 0){
            return false;
         }
         //找出相等的两边
         if(p1p2 == p1p3){
            return p1p4 == p1p2 + p1p3;
         }else if(p1p2 == p1p4){
            return p1p3 == p1p2 + p1p4;
         }else if(p1p3 == p1p4){
            return p1p2 == p1p3 + p1p4;
         }else{
            return false;
         }
      }

   }
}
